const logger = require('../utils/logger')

/**
 * 全局错误处理中间件
 * 捕获并处理应用程序中的错误
 */
module.exports = (err, req, res, next) => {
  // 记录错误
  logger.error('Error:', err.message)
  logger.error('Stack:', err.stack)

  // 确定状态码
  const statusCode = err.statusCode || 500

  // 确定错误消息
  let message = '服务器内部错误'
  
  // 开发环境下返回详细错误信息
  if (process.env.NODE_ENV === 'development') {
    message = err.message || message
  } else {
    // 生产环境下对特定错误类型返回友好消息
    if (err.name === 'ValidationError') {
      message = '数据验证失败'
    } else if (err.name === 'UnauthorizedError') {
      message = '未授权访问'
    } else if (err.name === 'ForbiddenError') {
      message = '禁止访问'
    } else if (err.name === 'NotFoundError') {
      message = '资源不存在'
    }
  }

  // 发送错误响应
  res.status(statusCode).json({
    success: false,
    message,
    error: process.env.NODE_ENV === 'development' ? err.stack : undefined
  })
}